{"componentChunkName":"component---src-templates-blog-post-js","path":"/Build-Simple-Timeline-in-React/","result":{"data":{"site":{"siteMetadata":{"title":"Aleks Popovic - personal website and blog"}},"markdownRemark":{"id":"bb17deea-a6d9-5d21-a5c7-4915053d6945","excerpt":"A lot of portfolio websites today have some sort of a timeline which can be used in different ways. You can showcase your job and education history, past…","html":"<p>A lot of portfolio websites today have some sort of a timeline which can be used in different ways. You can showcase your job and education history, past projects, your blog posts and everything else that can be structured in a timeline. You can potentially build this on your own, or you can use one of the existing plugins which are very easy to setup and look pretty good out of the box. I will show you one of those plugins and an example of how you can generate all elements with some simulated data and you will have your own timeline in no time.</p>\n<p>If you prefer a video version you can watch me build this on Youtube:</p>\n<div class=\"gatsby-resp-iframe-wrapper\" style=\"padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem\" > <iframe src=\"https://www.youtube.com/embed/-rnkToU2_lw\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen style=\" position: absolute; top: 0; left: 0; width: 100%; height: 100%; \"></iframe> </div>\n<p>I started a new React app by running create-react-app command in my working folder.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">create-react-app timeline</code></pre></div>\n<p>The plan is to build a Component which can pull all of our job and education history, including titles, dates, descriptions etc. and programmatically create a timeline out of it. I will simulate a database by using a separate JavaScript file which exports an array of objects containg all data, but you can use whatever you have available, or just use mine. Here is what the file timelineElements.js looks like:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">let</span> timelineElements <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token punctuation\">{</span>\n    id<span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n    title<span class=\"token operator\">:</span> <span class=\"token string\">\"Frontend Developer\"</span><span class=\"token punctuation\">,</span>\n    location<span class=\"token operator\">:</span> <span class=\"token string\">\"Dragontail, Ascana\"</span><span class=\"token punctuation\">,</span>\n    description<span class=\"token operator\">:</span>\n      <span class=\"token string\">\"Converting data to a graphical interface, through the use of HTML, CSS, and JavaScript, so that users can view and interact with that data.\"</span><span class=\"token punctuation\">,</span>\n    buttonText<span class=\"token operator\">:</span> <span class=\"token string\">\"View Frontend Projects\"</span><span class=\"token punctuation\">,</span>\n    date<span class=\"token operator\">:</span> <span class=\"token string\">\"August 2016 - present\"</span><span class=\"token punctuation\">,</span>\n    icon<span class=\"token operator\">:</span> <span class=\"token string\">\"work\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span>\n    id<span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n    title<span class=\"token operator\">:</span> <span class=\"token string\">\"Backend Developer\"</span><span class=\"token punctuation\">,</span>\n    location<span class=\"token operator\">:</span> <span class=\"token string\">\"Skystead, Craonia\"</span><span class=\"token punctuation\">,</span>\n    description<span class=\"token operator\">:</span>\n      <span class=\"token string\">\"Working hand-in-hand with front-end developers by providing the outward facing web application elements server-side logic. Creating the logic to make the web app function properly, and accomplishing this through the use of server-side scripting languages.\"</span><span class=\"token punctuation\">,</span>\n    buttonText<span class=\"token operator\">:</span> <span class=\"token string\">\"View Backend Projects\"</span><span class=\"token punctuation\">,</span>\n    date<span class=\"token operator\">:</span> <span class=\"token string\">\"June 2013 - August 2016\"</span><span class=\"token punctuation\">,</span>\n    icon<span class=\"token operator\">:</span> <span class=\"token string\">\"work\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span>\n    id<span class=\"token operator\">:</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span>\n    title<span class=\"token operator\">:</span> <span class=\"token string\">\"Quality Assurance Engineer\"</span><span class=\"token punctuation\">,</span>\n    location<span class=\"token operator\">:</span> <span class=\"token string\">\"South Warren, Geshington\"</span><span class=\"token punctuation\">,</span>\n    description<span class=\"token operator\">:</span>\n      <span class=\"token string\">\"Assessing the quality of specifications and technical design documents in order to ensure timely, relevant and meaningful feedback.\"</span><span class=\"token punctuation\">,</span>\n    buttonText<span class=\"token operator\">:</span> <span class=\"token string\">\"Company Website\"</span><span class=\"token punctuation\">,</span>\n    date<span class=\"token operator\">:</span> <span class=\"token string\">\"September 2011 - June 2013\"</span><span class=\"token punctuation\">,</span>\n    icon<span class=\"token operator\">:</span> <span class=\"token string\">\"work\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span>\n    id<span class=\"token operator\">:</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span>\n    title<span class=\"token operator\">:</span> <span class=\"token string\">\"Oak Ridge College\"</span><span class=\"token punctuation\">,</span>\n    location<span class=\"token operator\">:</span> <span class=\"token string\">\"South Warren, Geshington\"</span><span class=\"token punctuation\">,</span>\n    description<span class=\"token operator\">:</span>\n      <span class=\"token string\">\"Online Course in Magical Beasts and Wonders of the World - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec scelerisque sagittis tellus, non ultrices lacus tempus vel.\"</span><span class=\"token punctuation\">,</span>\n    buttonText<span class=\"token operator\">:</span> <span class=\"token string\">\"Course Certificate\"</span><span class=\"token punctuation\">,</span>\n    date<span class=\"token operator\">:</span> <span class=\"token string\">\"September 2011\"</span><span class=\"token punctuation\">,</span>\n    icon<span class=\"token operator\">:</span> <span class=\"token string\">\"school\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span>\n    id<span class=\"token operator\">:</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span>\n    title<span class=\"token operator\">:</span> <span class=\"token string\">\"Hawking College\"</span><span class=\"token punctuation\">,</span>\n    location<span class=\"token operator\">:</span> <span class=\"token string\">\"Skystead, Craonia\"</span><span class=\"token punctuation\">,</span>\n    description<span class=\"token operator\">:</span>\n      <span class=\"token string\">\"College - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec scelerisque sagittis tellus, non ultrices lacus tempus vel.\"</span><span class=\"token punctuation\">,</span>\n    buttonText<span class=\"token operator\">:</span> <span class=\"token string\">\"College Projects\"</span><span class=\"token punctuation\">,</span>\n    date<span class=\"token operator\">:</span> <span class=\"token string\">\"2007 - 2011\"</span><span class=\"token punctuation\">,</span>\n    icon<span class=\"token operator\">:</span> <span class=\"token string\">\"school\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">{</span>\n    id<span class=\"token operator\">:</span> <span class=\"token number\">6</span><span class=\"token punctuation\">,</span>\n    title<span class=\"token operator\">:</span> <span class=\"token string\">\"Marble Hills Grammar School\"</span><span class=\"token punctuation\">,</span>\n    location<span class=\"token operator\">:</span> <span class=\"token string\">\"Dragontail, Ascana\"</span><span class=\"token punctuation\">,</span>\n    description<span class=\"token operator\">:</span>\n      <span class=\"token string\">\"Highschool - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec scelerisque sagittis tellus, non ultrices lacus tempus vel.\"</span><span class=\"token punctuation\">,</span>\n    date<span class=\"token operator\">:</span> <span class=\"token string\">\"2003 - 2007\"</span><span class=\"token punctuation\">,</span>\n    icon<span class=\"token operator\">:</span> <span class=\"token string\">\"school\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> timelineElements</code></pre></div>\n<p>As our data is going to contain previous jobs and school information we will need two separate icons to display it. I found a couple of svg icons online - pc monitor for jobs, and college hat for education.</p>\n<p>We also need to install the timeline plugin by running the npm command:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">npm i react<span class=\"token operator\">-</span>vertical<span class=\"token operator\">-</span>timeline<span class=\"token operator\">-</span>component</code></pre></div>\n<p>Since this is a simple project I am going to put everything inside of the App component except for the css which will go into a separate App.css file. To start of we need to import the plugin, data file and our svg icons.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token keyword\">import</span> <span class=\"token string\">\"./App.css\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> ReactComponent <span class=\"token keyword\">as</span> WorkIcon <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./work.svg\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> ReactComponent <span class=\"token keyword\">as</span> SchoolIcon <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./school.svg\"</span>\n\n<span class=\"token keyword\">import</span> timelineElements <span class=\"token keyword\">from</span> <span class=\"token string\">\"./timelineElements\"</span>\n\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span>\n  VerticalTimeline<span class=\"token punctuation\">,</span>\n  VerticalTimelineElement<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"react-vertical-timeline-component\"</span>\n\n<span class=\"token keyword\">import</span> <span class=\"token string\">\"react-vertical-timeline-component/style.min.css\"</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">App</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h1</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>title<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Timeline</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">VerticalTimeline</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">VerticalTimeline</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> App</code></pre></div>\n<p>We need to map out our data file into timeline elements.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token keyword\">import</span> <span class=\"token string\">\"./App.css\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> ReactComponent <span class=\"token keyword\">as</span> WorkIcon <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./work.svg\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> ReactComponent <span class=\"token keyword\">as</span> SchoolIcon <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./school.svg\"</span>\n\n<span class=\"token keyword\">import</span> timelineElements <span class=\"token keyword\">from</span> <span class=\"token string\">\"./timelineElements\"</span>\n\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span>\n  VerticalTimeline<span class=\"token punctuation\">,</span>\n  VerticalTimelineElement<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"react-vertical-timeline-component\"</span>\n\n<span class=\"token keyword\">import</span> <span class=\"token string\">\"react-vertical-timeline-component/style.min.css\"</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">App</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h1</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>title<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Timeline</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">VerticalTimeline</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">        </span><span class=\"token punctuation\">{</span>timelineElements<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">element</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span></span><span class=\"gatsby-highlight-code-line\">          <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span></span><span class=\"gatsby-highlight-code-line\">            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">VerticalTimelineElement</span></span></span><span class=\"gatsby-highlight-code-line\">              <span class=\"token attr-name\">key</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>key<span class=\"token punctuation\">}</span></span></span><span class=\"gatsby-highlight-code-line\">              <span class=\"token attr-name\">date</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">}</span></span></span><span class=\"gatsby-highlight-code-line\">              <span class=\"token attr-name\">dateClassName</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>date<span class=\"token punctuation\">\"</span></span></span><span class=\"gatsby-highlight-code-line\">            <span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h3</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>vertical-timeline-element-title<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">                </span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h3</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h5</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>vertical-timeline-element-subtitle<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">                </span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>location<span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h5</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>description<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>description<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">VerticalTimelineElement</span></span><span class=\"token punctuation\">></span></span></span><span class=\"gatsby-highlight-code-line\">          <span class=\"token punctuation\">)</span></span><span class=\"gatsby-highlight-code-line\">        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">VerticalTimeline</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> App</code></pre></div>\n<p>The timeline plugin gives us an option to set up an object for the icon styles, and we can use this to set a different icon with different styles based on the type of icon defined in the file.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token keyword\">import</span> <span class=\"token string\">\"./App.css\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> ReactComponent <span class=\"token keyword\">as</span> WorkIcon <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./work.svg\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> ReactComponent <span class=\"token keyword\">as</span> SchoolIcon <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./school.svg\"</span>\n\n<span class=\"token keyword\">import</span> timelineElements <span class=\"token keyword\">from</span> <span class=\"token string\">\"./timelineElements\"</span>\n\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span>\n  VerticalTimeline<span class=\"token punctuation\">,</span>\n  VerticalTimelineElement<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"react-vertical-timeline-component\"</span>\n\n<span class=\"token keyword\">import</span> <span class=\"token string\">\"react-vertical-timeline-component/style.min.css\"</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">App</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"gatsby-highlight-code-line\">  <span class=\"token keyword\">let</span> workIconStyles <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> background<span class=\"token operator\">:</span> <span class=\"token string\">\"#06D6A0\"</span> <span class=\"token punctuation\">}</span></span><span class=\"gatsby-highlight-code-line\">  <span class=\"token keyword\">let</span> schoolIconStyles <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> background<span class=\"token operator\">:</span> <span class=\"token string\">\"#f9c74f\"</span> <span class=\"token punctuation\">}</span></span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h1</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>title<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Timeline</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">VerticalTimeline</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">        </span><span class=\"token punctuation\">{</span>timelineElements<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">element</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">let</span> isWorkIcon <span class=\"token operator\">=</span> element<span class=\"token punctuation\">.</span>icon <span class=\"token operator\">===</span> <span class=\"token string\">\"work\"</span>\n\n          <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n            <span class=\"token operator\">&lt;</span>VerticalTimelineElement\n              key<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>key<span class=\"token punctuation\">}</span>\n              date<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">}</span>\n              dateClassName<span class=\"token operator\">=</span><span class=\"token string\">\"date\"</span>\n<span class=\"gatsby-highlight-code-line\">              iconStyle<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>isWorkIcon <span class=\"token operator\">?</span> workIconStyles <span class=\"token operator\">:</span> schoolIconStyles<span class=\"token punctuation\">}</span></span><span class=\"gatsby-highlight-code-line\">              icon<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>isWorkIcon <span class=\"token operator\">?</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">WorkIcon</span></span> <span class=\"token punctuation\">/></span></span> <span class=\"token operator\">:</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">SchoolIcon</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">}</span></span>            <span class=\"token operator\">></span>\n              <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h3</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>vertical-timeline-element-title<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">                </span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h3</span><span class=\"token punctuation\">></span></span>\n              <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h5</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>vertical-timeline-element-subtitle<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">                </span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>location<span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h5</span><span class=\"token punctuation\">></span></span>\n              <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>description<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>description<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">VerticalTimelineElement</span></span><span class=\"token punctuation\">></span></span>\n          <span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">VerticalTimeline</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> App</code></pre></div>\n<p>We can also set up a custom button for each of the timeline elements which can also have different styles applied to it depending on the timeline element type.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token keyword\">import</span> <span class=\"token string\">\"./App.css\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> ReactComponent <span class=\"token keyword\">as</span> WorkIcon <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./work.svg\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> ReactComponent <span class=\"token keyword\">as</span> SchoolIcon <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"./school.svg\"</span>\n\n<span class=\"token keyword\">import</span> timelineElements <span class=\"token keyword\">from</span> <span class=\"token string\">\"./timelineElements\"</span>\n\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span>\n  VerticalTimeline<span class=\"token punctuation\">,</span>\n  VerticalTimelineElement<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"react-vertical-timeline-component\"</span>\n\n<span class=\"token keyword\">import</span> <span class=\"token string\">\"react-vertical-timeline-component/style.min.css\"</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">App</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">let</span> workIconStyles <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> background<span class=\"token operator\">:</span> <span class=\"token string\">\"#06D6A0\"</span> <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">let</span> schoolIconStyles <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span> background<span class=\"token operator\">:</span> <span class=\"token string\">\"#f9c74f\"</span> <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h1</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>title<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Timeline</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">VerticalTimeline</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">        </span><span class=\"token punctuation\">{</span>timelineElements<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">element</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">let</span> isWorkIcon <span class=\"token operator\">=</span> element<span class=\"token punctuation\">.</span>icon <span class=\"token operator\">===</span> <span class=\"token string\">\"work\"</span>\n<span class=\"gatsby-highlight-code-line\">          <span class=\"token keyword\">let</span> showButton <span class=\"token operator\">=</span></span><span class=\"gatsby-highlight-code-line\">            element<span class=\"token punctuation\">.</span>buttonText <span class=\"token operator\">!==</span> <span class=\"token keyword\">undefined</span> <span class=\"token operator\">&amp;&amp;</span></span><span class=\"gatsby-highlight-code-line\">            element<span class=\"token punctuation\">.</span>buttonText <span class=\"token operator\">!==</span> <span class=\"token keyword\">null</span> <span class=\"token operator\">&amp;&amp;</span></span><span class=\"gatsby-highlight-code-line\">            element<span class=\"token punctuation\">.</span>buttonText <span class=\"token operator\">!==</span> <span class=\"token string\">\"\"</span></span>\n          <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">VerticalTimelineElement</span></span>\n              <span class=\"token attr-name\">key</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>key<span class=\"token punctuation\">}</span></span>\n              <span class=\"token attr-name\">date</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>date<span class=\"token punctuation\">}</span></span>\n              <span class=\"token attr-name\">dateClassName</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>date<span class=\"token punctuation\">\"</span></span>\n              <span class=\"token attr-name\">iconStyle</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>isWorkIcon <span class=\"token operator\">?</span> workIconStyles <span class=\"token operator\">:</span> schoolIconStyles<span class=\"token punctuation\">}</span></span>\n              <span class=\"token attr-name\">icon</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>isWorkIcon <span class=\"token operator\">?</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">WorkIcon</span></span> <span class=\"token punctuation\">/></span></span> <span class=\"token operator\">:</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">SchoolIcon</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">}</span></span>\n            <span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h3</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>vertical-timeline-element-title<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">                </span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>title<span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h3</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h5</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>vertical-timeline-element-subtitle<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">                </span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>location<span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h5</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">              </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>description<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>description<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">              </span><span class=\"token punctuation\">{</span>showButton <span class=\"token operator\">&amp;&amp;</span> <span class=\"token punctuation\">(</span></span><span class=\"gatsby-highlight-code-line\">                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span></span><span class=\"gatsby-highlight-code-line\">                  <span class=\"token attr-name\">className</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">button </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span></span><span class=\"gatsby-highlight-code-line\">                    isWorkIcon <span class=\"token operator\">?</span> <span class=\"token string\">\"workButton\"</span> <span class=\"token operator\">:</span> <span class=\"token string\">\"schoolButton\"</span></span><span class=\"gatsby-highlight-code-line\">                  <span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">}</span></span></span><span class=\"gatsby-highlight-code-line\">                  <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>/<span class=\"token punctuation\">\"</span></span></span><span class=\"gatsby-highlight-code-line\">                <span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">                  </span><span class=\"token punctuation\">{</span>element<span class=\"token punctuation\">.</span>buttonText<span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span></span><span class=\"gatsby-highlight-code-line\"><span class=\"token plain-text\">                </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span></span><span class=\"gatsby-highlight-code-line\">              <span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span></span><span class=\"token plain-text\">            </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">VerticalTimelineElement</span></span><span class=\"token punctuation\">></span></span>\n          <span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">VerticalTimeline</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"></span>\n<span class=\"token plain-text\">    </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> App</code></pre></div>\n<p>With that our component is finished and we can move on to the App.css file and apply the rest of our styling.</p>\n<div class=\"gatsby-highlight\" data-language=\"css\"><pre class=\"language-css\"><code class=\"language-css\"><span class=\"token selector\">body</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">background</span><span class=\"token punctuation\">:</span> #3da3d5<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">font-family</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"Montserrat\"</span><span class=\"token punctuation\">,</span> sans-serif<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 16px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">rgb</span><span class=\"token punctuation\">(</span>53<span class=\"token punctuation\">,</span> 53<span class=\"token punctuation\">,</span> 53<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.title</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 15em<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">font-family</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"Bebas Neue\"</span><span class=\"token punctuation\">,</span> sans-serif<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">h3</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">padding-top</span><span class=\"token punctuation\">:</span> 0.25em<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.vertical-timeline-element-content</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">box-shadow</span><span class=\"token punctuation\">:</span> 0 0.25em 0.5em 0 <span class=\"token function\">rgba</span><span class=\"token punctuation\">(</span>0<span class=\"token punctuation\">,</span> 0<span class=\"token punctuation\">,</span> 0<span class=\"token punctuation\">,</span> 0.25<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> 0 0.4em 1.25em 0 <span class=\"token function\">rgba</span><span class=\"token punctuation\">(</span>0<span class=\"token punctuation\">,</span> 0<span class=\"token punctuation\">,</span> 0<span class=\"token punctuation\">,</span> 0.15<span class=\"token punctuation\">)</span> <span class=\"token important\">!important</span><span class=\"token punctuation\">;</span>\n  <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 2em 3em <span class=\"token important\">!important</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.date</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">rgb</span><span class=\"token punctuation\">(</span>201<span class=\"token punctuation\">,</span> 251<span class=\"token punctuation\">,</span> 255<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">#description</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">margin</span><span class=\"token punctuation\">:</span> 1.5em 0 2em 0<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.button</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">text-decoration</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 0.5em 1em<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">border-radius</span><span class=\"token punctuation\">:</span> 5px<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> white<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.workButton</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> #06d6a0<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.workButton:hover</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> #0ac593<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.schoolButton</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> #f9c74f<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">.schoolButton:hover</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> #f3bc3c<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>I’ve made the date text a very light blue color which becomes a bit unreadable once we switch to a screen width lower than 1700px. We can fix this along with its awkward positioning by using a simple media rule.</p>\n<div class=\"gatsby-highlight\" data-language=\"css\"><pre class=\"language-css\"><code class=\"language-css\"><span class=\"token atrule\"><span class=\"token rule\">@media</span> only screen and <span class=\"token punctuation\">(</span><span class=\"token property\">max-width</span><span class=\"token punctuation\">:</span> 1700px<span class=\"token punctuation\">)</span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token selector\">.vertical-timeline-element-date</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> block <span class=\"token important\">!important</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">float</span><span class=\"token punctuation\">:</span> none <span class=\"token important\">!important</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">rgb</span><span class=\"token punctuation\">(</span>44<span class=\"token punctuation\">,</span> 44<span class=\"token punctuation\">,</span> 44<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token property\">margin-top</span><span class=\"token punctuation\">:</span> 1.5em<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>If you followed along successfully you should now have a prototype of a simple, yet versatile timeline. The plugin itself allows you to add and switch many different things. For full documentation take a look at its <a href=\"https://www.npmjs.com/package/react-vertical-timeline-component\" target=\"_blank\" rel=\"noopener noreferrer\">official npm page</a>.</p>\n<p>You can find the full code on my <a href=\"https://github.com/alekspopovic/simple-react-timeline\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>.</p>\n<hr>\n<div class=\"sectionHighlight\">If you have any questions or comments you can reach out to me on <a href=\"https://twitter.com/alekswritescode\" target=\"_blank\" rel=\"noopener noreferrer\">Twitter</a> and <a href=\"https://www.instagram.com/aleks.popovic/\" target=\"_blank\" rel=\"noopener noreferrer\">Instagram</a>, where I also post interesting code tidbits and designs.\n<p>I also have a <a href=\"https://www.youtube.com/AleksPopovic\" target=\"_blank\" rel=\"noopener noreferrer\">YouTube channel</a> where I regularly upload React and web dev tutorials, so if that’s your cup of tea feel free to support me by subscribing.</div></p>","frontmatter":{"title":"Build Simple Timeline in React","series":null,"seriesLink":null,"date":"November 22, 2020","description":"A lot of portfolio websites today have some sort of a timeline which can be used in different ways. You can showcase your job and education history, past projects, your blog posts and everything else that can be structured in a timeline. You can potentially build this on your own, or you can use one of the existing plugins which are very easy to setup and look pretty good out of the box. I will show you one of those plugins and an example of how you can generate all elements with some simulated data and you will have your own timeline in no time.","tags":["web","react"],"featuredImage":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACHElEQVQoz02S709ScRTG+ReKOUs3/AFcdG7NNduqd76yOTPX0kTQIc5QS24ljgRETbhCoF4uKJehL9Da8tZSoxWamZWzH1t/06erNe3Fs+d8t7PPzjnP12B1yAh9Gcz9KpUDq1R5X2J6UqQ69J4qZwZTT5pqewqhN33SV9vqo0aX9fj9n6xO5cQNtvHXWPybXJV2uF84pCN7gGvtO7eX97k1rdEZKtA6lqfascTlOwFGuzoQ7W1c6xzH7FxCsC+ewo7dUB/5SG2gSMvCHs+3Svz+9YPdvQOC6zts7x/x8/Ab7aJCRXeGG10PKUZFjpZ9DA6NYurPUye+QOjPnk1Y/3QHc/AdLfES7vkNZteK+FbfMpLe5L6URyq84bpH4YIzh9u3wPakl1fjvTyeTVAV/UpD4gvCg3WsPfK/lQPb1Pm3qIgvU5ZMYkyqGONRLkoxjFMRjOEpLEP67aY/0R3XkN12xOZGBoMxzDrQEv2MzaedAQWXPq47y/ncLOVSgLL0DGXPJjinTlIuT1EpznBpQKU9XECMrDDQ5eRmUwNadpLQ2hbN8i6W8Acdpvy9oeA4LlLU3JP0pBO6x6gZjlHrmaPCI3HFmyFRKOGPKoQSeVbUFfZSY5S0NBE1h6xt0DShYXYoJ1DDafx6ioL+TQRHBpsuiz1Do0vFE9UYCaVoc/kZDiziDSsEpAVC82kezckEk4v0Tecw3U1h60vzB+bicRLbGqHmAAAAAElFTkSuQmCC","aspectRatio":2.6666666666666665,"src":"/static/a929e3923f26a25007ff04dbf6fd2936/0e6e2/timeline.png","srcSet":"/static/a929e3923f26a25007ff04dbf6fd2936/b460a/timeline.png 480w,\n/static/a929e3923f26a25007ff04dbf6fd2936/6e898/timeline.png 960w,\n/static/a929e3923f26a25007ff04dbf6fd2936/0e6e2/timeline.png 1920w","srcWebp":"/static/a929e3923f26a25007ff04dbf6fd2936/30cf3/timeline.webp","srcSetWebp":"/static/a929e3923f26a25007ff04dbf6fd2936/35871/timeline.webp 480w,\n/static/a929e3923f26a25007ff04dbf6fd2936/fcc10/timeline.webp 960w,\n/static/a929e3923f26a25007ff04dbf6fd2936/30cf3/timeline.webp 1920w","sizes":"(max-width: 1920px) 100vw, 1920px"}}}}}},"pageContext":{"slug":"/Build-Simple-Timeline-in-React/","previous":{"excerpt":"Instagram has such a simple, yet elegant design, and on top of that it’s very modular. It’s almost like a puzzle because it has a lot of…","fields":{"slug":"/How-to-build-Instagram-in-React/"},"frontmatter":{"date":"November 17, 2020","title":"How to build Instagram in React","series":null,"description":"Instagram has such a simple, yet elegant design, and on top of that it's very modular. It's almost like a puzzle because it has a lot of parts that can be reused throughout the app which makes it very interesting to build as a practice project. We are going to build Instagram in React and we are going to reuse as much of our code as we possibly can to make profile cards, story icons, posts and pretty much everything else that exists on Instagram's home page.","tags":["web","react"],"featuredImage":{"id":"5c63fc36-3cdb-5062-8d93-727476be18f6","publicURL":"/static/0e297124781de56c47db06278a84f787/instaBg.png","relativeDirectory":"How-to-build-Instagram-in-React","relativePath":"How-to-build-Instagram-in-React/instaBg.png"}}},"next":{"excerpt":"If you are a developer you probably have a GitHub account, and if you’re like me your profile page is probably empty. I would even say…","fields":{"slug":"/Easiest-way-to-set-up-your-Github-profile-page/"},"frontmatter":{"date":"November 27, 2020","title":"Easiest way to set up your GitHub profile page","series":null,"description":"If you are a developer you probably have a GitHub account, and if you're like me your profile page is probably empty. I would even say barren. Utterly uninteresting? If that's true then you are at the right place, because in this tutorial I am going to show you some quick and easy tips to make your GitHub profile at least somewhat presentable.","tags":["productivity","github"],"featuredImage":{"id":"7f327b1f-be71-54ba-bd4a-523d4f96e39f","publicURL":"/static/cc4780a5217804212e07214ae02b06ca/github.png","relativeDirectory":"Easiest-way-to-set-up-your-Github-profile-page","relativePath":"Easiest-way-to-set-up-your-Github-profile-page/github.png"}}}}}}